package network

// 网络连接回调处理函数
// 需要在函数内对新连接进行管理
type OnConnect func(Conn)

// 网络连接事件处理器
type EventHandler interface {
	// 网络连接数据处理函数
	// 单个连接只会对此接口阻塞调用,多个连接共用将会并发调用
	OnMessage(conn Conn, msg any)

	// 网络连接定时任务处理函数
	// 在调用 Connection.Start() 前,调用 Connection.SetCrontabPeriod() 来开启
	OnCrontab(conn Conn)

	// 网络连接错误事件处理函数,返回true将关闭连接
	// 错误信息err经过Error封装，可以区分底层错误 network包错误 使用者自定义错误
	// 一般只需要处理底层错误和使用者自定义错误
	OnError(conn Conn, err Error) bool

	// 网络连接关闭事件处理函数
	// 错误信息err传递的是Conn.Stop()函数接收到的错误信息
	// 该函数中不能调用Conn.Stop()函数，否则会导致死锁
	OnDisconnect(conn Conn, err Error)

	// 将消息编码为二进制数据
	Encode(conn Conn, msg any) ([]byte, error)

	// 将二进制数据解码为消息 解码出来的消息将传递给OnMessage函数
	Decode(conn Conn, pkt any) (msg any, len int, err error)
}
